﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using IrendilDLL;
using Subgurim.Controles;
using IrendilDLL.Database;
using System.Data;
using System.Web.UI.HtmlControls;
using System.Configuration;
using IrendilDLL.utilities;
using AjaxControlToolkit;

namespace Irendil
{
    public partial class Overview : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                // Salvataggio ID installazione della sessione
                String GUID = Request.Form["ctl00$selectedInstallation"];
                if (GUID != null && GUID != "" && GUID != String.Empty)
                    // Salvo il GUID della sessione
                    Session["installationGUID"] = GUID;

                // Procedo solo se é correttamente inizializzata la variabile di sessione
                String installationGUID = (String)Session["installationGUID"];
                if (installationGUID != "" || installationGUID != String.Empty)
                {

                    // Recupero le informazioni relativa al nodo dell'installazione selezionato
                    List<InstallationNode> installationNodeList = (List<InstallationNode>)Session["installationNodeList"];
                    InstallationNode installationNodeActive = null;
                    foreach (InstallationNode installationNode in installationNodeList)
                    {
                        if (installationNode.GUID == installationGUID)
                            installationNodeActive = installationNode;
                    }
                    // Se come devo trovo il nodo attivo vado avanti
                    if (installationNodeActive != null)
                    {
                        try
                        {
                            System.Web.UI.WebControls.Label labelMessageOut = (System.Web.UI.WebControls.Label)Master.FindControl("LabelMessageOut");
                            labelMessageOut.Text = "Connesso a <b>" + installationNodeActive.Description + "</b>";

                            // Recupero le installazioni da DB
                            // Instauro connessione
                            IrendilDbManager irendilDbManager = new IrendilDbManager(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);

                            // IMPOSTO PROPRIETA' MAPPA
                            InitGMap(installationNodeActive);
                            // Ottengo gli host relativi alla installazione corrente
                            DataSet ds = irendilDbManager.getHostsList(installationNodeActive.GUID);


                            // Ciclo su tutti gli elementi del dataset
                            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                            {

                                /////////////////////////
                                // Popolo gmap
                                /////////////////////////

                                // Controllo che siano valorizzate le latitudini e longitudini
                                if (ds.Tables[0].Rows[i]["lat"] != null && ds.Tables[0].Rows[i]["lat"] != DBNull.Value && ds.Tables[0].Rows[i]["lon"] != null && ds.Tables[0].Rows[i]["lon"] != DBNull.Value)
                                {
                                    // Creo marker
                                    GMarker gmarker = new GMarker(new GLatLng(Convert.ToDouble(ds.Tables[0].Rows[i]["lat"]), Convert.ToDouble(ds.Tables[0].Rows[i]["lon"])));
                                    String gInfoStr = "<table>";
                                    gInfoStr += "<tr><td class=\"Etichetta\">Ospedale: " + ds.Tables[0].Rows[i]["descriptionHospital"].ToString() + "</td></tr>";
                                    gInfoStr += "<tr><td class=\"EtichettaLightCompact\" >Nome host: " + ds.Tables[0].Rows[i]["Host"].ToString() + "</td></tr>";
                                    gInfoStr += "<tr><td class=\"EtichettaLightCompact\" >Indirizzo IP: " + ds.Tables[0].Rows[i]["PrimaryIp"].ToString() + "</td></tr>";
                                    gInfoStr += "</table>";
                                    GInfoWindow gInfoWindow = new GInfoWindow(gmarker, gInfoStr, false);
                                    gmarker.ID = gmarker.ID;
                                    //gmarker.ID = i.ToString();
                                    GMap.Add(gmarker);
                                    GMap.Add(gInfoWindow);
                                }
                        
                            }

                        }
                        catch (Exception ex)
                        {
                            //// Onde evitare di perdere eccezioni riscivo l'errore su file anche se creo duplicati
                            // Istanzio la classe di gestione dell'errore
                            LogErrors logError = new LogErrors();
                            // Scrivo l'errore su file
                            logError.WriteLogToFile(ex.Source+": "+ex.Message);
                            // Visualizzo la finestra di errore
                            ((ModalPopupExtender)Master.FindControl("ModalPopupExtender")).Show();
                            
                        }

                    }


                }
            
            }
            catch (Exception ex)
            {
                //// Onde evitare di perdere eccezioni riscivo l'errore su file anche se creo duplicati
                // Istanzio la classe di gestione dell'errore
                LogErrors logError = new LogErrors();
                // Scrivo l'errore su file
                logError.WriteLogToFile(ex.Source+": "+ex.Message);
                // In caso di sessione scaduta o altro redirigo alla pagina di login
                Response.Redirect("~//Logout.aspx");
            }
        }


        /// <summary>
        /// Inizializzazione google maps
        /// </summary>
        private void InitGMap(InstallationNode installationNodeActive)
        {
            // Imposto coordinate di partenza GMaps
            GMap.setCenter(new Subgurim.Controles.GLatLng(installationNodeActive.Lat, installationNodeActive.Lon));
            GMap.GZoom = 11;
            // Navigaror Gmap
            GMap.addGMapUI(new GMapUI());
            // Imposto proprietà navigatore
            GMapUIOptions options = new GMapUIOptions();
            options.maptypes_hybrid = false;
            options.keyboard = false;
            options.maptypes_physical = false;
            options.zoom_scrollwheel = false;
            GMap.Add(new GMapUI(options));


        }
    }
}
